﻿<h1>关键字和标识符</h1>

<p>
此篇文章将介绍Go中的关键字和标识符。
</p>

<a class="anchor" id="keyword"></a>
<h3>关键字</h3>

<div>
<p>
关键字是一些特殊的用来帮助编译器理解和解析源代码的单词。
</p>

截止目前（Go 1.13），Go中共有25个关键字。

<pre class="line-numbers fixed-width"><code class="language-go">break     default      func    interface  select
case      defer        go      map        struct
chan      else         goto    package    switch
const     fallthrough  if      range      type
continue  for          import  return     var
</code></pre>

这些关键字可以分为四组：
<ul>
<li>
	<code>const</code>、<code>func</code>、<code>import</code>、<code>package</code>、<code>type</code>和<code>var</code>用来声明各种代码元素。
</li>
<li>
	<code>chan</code>、<code>interface</code>、<code>map</code>和<code>struct</code>用做
	一些组合类型的字面表示中。
</li>
<li>
	<code>break</code>、<code>case</code>、<code>continue</code>、<code>default</code>、<code>else</code>、<code>fallthrough</code>、<code>for</code>、<code>goto</code>、<code>if</code>、<code>range</code>、<code>return</code>、<code>select</code>和<code>switch</code>用在流程控制语句中。
	详见<a href="control-flows.html">基本流程控制语法</a>。
</li>
<li>
	<code>defer</code>和<code>go</code>也可以看作是流程控制关键字，
	但它们有一些特殊的作用。详见<a href="control-flows-more.html">协程和延迟函数调用</a>。
</li>
</ul>

<p>
这些关键字将在后续文章中得到详细介绍。
</p>
</div>

<a class="anchor" id="identifier"></a>
<h3>标识符</h3>

<div>
一个标识符是一个以Unicode字母或者<code>_</code>开头并且完全由Unicode字母和Unicode数字组成的单词。
<ul>
<li>
	Unicode字母是定义在<a href="http://www.unicode.org/versions/Unicode8.0.0/">Unicode标准8.0</a>
	中的<i>Lu</i>、<i>Ll</i>、<i>Lt</i>、<i>Lm</i>和<i>Lo</i>分类中的字符。
</li>
<li>
	Unicode数字是定义在Unicode标准8.0中的<i>Nd</i>数字字符分类中的字符。
</li>
</ul>
</div>

<p>
注意：<b>关键字不能被用做标识符。</b>
</p>

<p>
标识符<code>_</code>是一个特殊字符，它叫做<b>空标识符</b>。
</p>

<p>
以后，我们将知道所有的类型名、变量名、常量名、跳转标签、包名和包的引入名都必须是标识符。
</p>

<p>
一个由<a href="http://www.fileformat.info/info/unicode/category/Lu/list.htm">Unicode大写字母</a>开头的标识符称为<b>导出标识符</b>。
这里<b><i>导出</i></b>可以被理解为<b><i>公开</i></b>（public）。
其它（即非Unicode大写字母开头的）标识符称为<b>非导出标识符</b>。
<b><i>非导出</i></b>可以被理解为<b><i>私有</i></b>（private）。
截至目前（Go 1.13），东方字符都被视为非导出字符。
<b>非导出</b>有时候也被称为<b><i>未导出</i></b>。
</p>

<div>
下面是一些合法的导出标识符：
<pre class="line-numbers fixed-width"><code class="language-go">Player_9
DoSomething
VERSION
Ĝo
Π
</code></pre>

下面是一些合法的未导出标识符：
<pre class="line-numbers fixed-width"><code class="language-go">_
_status
memStat
book
π
一个类型
변수
エラー
</code></pre>

下面这些不能被用做标识符：
<pre class="line-numbers fixed-width"><code class="language-go">// Unicode数字开头
123
3apples

// 含有不符合要求的Unicode字符
a.b
*ptr
$name
a@b.c

// 这两个是关键字
type
range
</code></pre>

</div>
